'''
mixin是一种开发模式，是一种将多个类中的功能单元进行组合的利用方式，这样看起来
类似类的继承（也可以实现），但是与传统的类的继承有些不同，通常Mixin不作为
任何类的基类，也不关心与什么类一起使用，而是在于运行时动态的同其他类一起组合使用，


优点：
    1、不修改任何源码的情况下对已有的类进行扩展
    2、可以保证组件的分组
    3、可以根据需求，使用已有的功能进行组合，来实现新的类
    4、避免了类继承的局限性
    5、

'''

# 定义mixin类一般省略object
class FixMiXin:
    def fixPhone(self):
        print("修手机")
    def fixComputer(self):
        print("修电脑")
    def say(self):
        print("修手机，修电脑，收旧手机，收长头发")


class Person(object):
    def __init__(self, name):
        self.name = name
    def say(self):
        print("lilei is a good man")

class Studnet(Person):
    def __init__(self, name, stuId):
        super().__init__(name)
        self.stuId = stuId

# 给pyClass动态添加父类pyMixinClass
# flag为1则pyMixinClass设为主要父类

def mixin(pyClass, pyMinxinClass, flag = 0):
    # [FixMixin, Person]
    if flag:
        print(pyClass.__bases__)
        pyClass.__bases__ = (pyMinxinClass,) + pyClass.__bases__
    elif pyMinxinClass not in pyClass.__bases__:
        pyClass.__bases__ += (pyMinxinClass,)

mixin(Studnet, FixMiXin, 1)


stu = Studnet("tom", 123456)
print(Studnet.__mro__)

print(Studnet.__bases__)
stu.say()